package com.panshi.controll;

import com.panshi.IssApi;
import com.panshi.api.util.PageSizeVO;
import com.panshi.bean.*;
import com.panshi.service.IssService;
import com.panshi.utils.UploadFileUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import java.util.Collections;
import java.util.List;

@Api(value="问题Controller层",tags={"操作问题接口"})
@RequestMapping("iss")
@RestController
@Slf4j
public class IssControll implements IssApi {
    @Resource
    private IssService iser;

    @PostMapping("/findAll")
    @ApiOperation("查询所有问题 根据主题获取问题 查询已回答未回答")
    public List<IssBean> findAllIss(@RequestBody PageModel page) throws Exception {
        //将api中的page转换成provider类的pu
        PageUtil pu=new PageUtil();
        BeanUtils.copyProperties(page,pu);

        pu.setStartIndex(pu.getStartIndexInfo());//获取起始页
        List<IssBean> list=iser.findAllIss(pu);
        for (IssBean is:list) {
            // 将时间进行转换为xxx前发布
            String timeFormatText = TimeBean.getTimeFormatText(is.getAudit_time());
            is.setDateTime(timeFormatText);
        }
        Collections.shuffle(list);//乱序输出

        return list;
    }

    @PostMapping("/findAll2")
    @ApiOperation("查询所有问题 首页的热榜")
    public List<IssBean> findAllIss2(@RequestBody PageModel page) {
        //将api中的page转换成provider类的pu
        PageUtil pu=new PageUtil();
        BeanUtils.copyProperties(page,pu);

        pu.setStartIndex(pu.getStartIndexInfo());//获取起始页
        List<IssBean> list=iser.findAllIss2(pu);
        for (IssBean is:list) {
            // 将时间进行转换为xxx前发布
            String timeFormatText = TimeBean.getTimeFormatText(is.getAudit_time());
            is.setDateTime(timeFormatText);
        }
        Collections.shuffle(list);//乱序输出
        return list;
    }

    @PostMapping("/findAll3")
    @ApiOperation("查询所有问题 首页的最新")
    public List<IssBean> findAllIss3(@RequestBody PageModel page) {
        //将api中的page转换成provider类的pu
        PageUtil pu=new PageUtil();
        BeanUtils.copyProperties(page,pu);

        pu.setStartIndex(pu.getStartIndexInfo());//获取起始页
        List<IssBean> list=iser.findAllIss3(pu);
        for (IssBean is:list) {
            // 将时间进行转换为xxx前发布
            String timeFormatText = TimeBean.getTimeFormatText(is.getAudit_time());
            is.setDateTime(timeFormatText);
        }
        Collections.shuffle(list);//乱序输出
        return list;
    }

    @PostMapping("/findTid")
    @ApiOperation("查询问题所有主题")
    public List<IssBean> findAllTid() {//查询所有主题
        return iser.findAllTid();
    }


    @PostMapping("/addIss")
    @ApiOperation("用户提出问题存入未审核表")
    public String initIss(@RequestBody IssBean iss) {
        System.out.println(iss.toString()+"==============");

        int i=iser.initIss(iss);//将数据存入未审核表中 //返回的主键就是图片表的回答表id
        System.out.println(i+"--------------");

        /*将前台传的图片存入图片表(可能存在多张图)
        ImageBean img=new ImageBean();
        img.setPid(i);//需获取上面返回的主键存入主键
        img.setImgpath(iss.getImageUrl());//将图片路径存入图片表
        int i2=iser.initIssImg(img);//i2=0:成功
        */
        return "增加成功";
    }

    @PostMapping("/uploadImg")
    @ApiOperation("图片上传")
    public String uploadImg(@RequestParam("file") MultipartFile file){
        System.out.println(file+"=============");
        return UploadFileUtil.uploadImg(file);
    }


    @GetMapping("/deleteIss")
   @ApiOperation("用户删除自己提出的问题,state:0问题表删,1审核表删除")
    public String deleteIss(@RequestParam int qid,@RequestParam int state){
        IssBean iss=iser.getByQid(qid);//根据问题id获取问题所有信息
       if(state==0){//进问题表
           List<Integer> ans=iser.getByQidFindAns(qid);//查询该问题下有多少个回答
           for (Integer as:ans) {//循环将该回答下的评论和点赞删除(答案表)
               iser.deleteQaAnsCom(as);//删评论
               iser.deleteQaAnsLike(as);//删点赞
           }

            iser.deleteQaAnswer(qid);//删除答案表问题
            iser.deleteQaAnswerNo(qid);//删除答案审核表问题
            iser.deleteIssImg(qid,state);//删除图片
            iser.deleteIss(qid);//删除问题

           iser.deleteUserQaCount(iss.getUid()); //用户表提问总数-1
        }else{//进审核表
            iser.deleteIssImg(qid,state);
            iser.deleteIssNo(qid);
        }
        return "删除成功";
    }


    @GetMapping("/readIss/{qid}")
    @ApiOperation("用户点击某个个问题根据问题id查询数据")
    public IssBean getByQid(@PathVariable int qid) {

        return iser.getByQid(qid);
    }

    @GetMapping("/readIss2/{qid}")
    @ApiOperation("用户点击某个个问题根据问题id查询数据(问题下所有答案)")
    public List<AnswerBean> getByQidAnswer(@PathVariable int qid) {
        iser.addReadCount(qid);//问题表阅读数+1
        return iser.getByQidAnswer(qid); //查询该问题下的所有回答
    }


    @GetMapping("/findHostIss")
    @ApiOperation("大家都在问")
    public List<IssBean> findHostIss(@RequestParam int tid,@RequestParam int i) {//i=1查五条  i=0查10条
        System.out.println(tid+"========="+i);
        List<IssBean> list=iser.findHostIss(tid,i);

        Collections.shuffle(list);//乱序输出
        return list;
    }

    @GetMapping("/aboutQa")
    @ApiOperation("点击问题后右边的相关推荐")
    public List<IssBean> aboutQa(@RequestParam int tid){
        return iser.aboutQa(tid);
    }

    @GetMapping("/initColl")
    @ApiOperation("用户点击收藏")
    public int initColl(@RequestParam int uid,@RequestParam int qid){
        IssCollBean i= iser.findColl(uid, qid);//查询用户在某问题是否点赞收藏
        if(i==null){//先去数据库判断是否已存在，没有就存值进去
            iser.initColl(uid,qid);
            iser.updateQa(qid);//在问题表的收藏量加1
            System.out.println("存入收藏表");
        }
        System.out.println(iser.findCollCount(qid)+"============");
        return iser.findCollCount(qid); //再将收藏数返回前台
    }

    @PostMapping("/userMessage")
    @ApiOperation("用户留言")
    public int userMessage(@RequestBody UserMessageBean um){
        return iser.userMessage(um);
    }

    @GetMapping("/findColumn")
    @ApiOperation("查询栏目信息")
    public List<ColumnBean> findColumn(){
        return iser.findColumn();
    }







    //管理员接口==========================================================================================================
    @PostMapping("/adminFindAll")
    @ApiOperation("管理员查询所有问题")
    public PageSizeVO<List<IssBean>> adminFindAll(@RequestBody PageSizeVO pageSizeVO){
        pageSizeVO.setStartIndex(pageSizeVO.getStartIndexInfo());//获取起始页


        //封装返回前台
        PageSizeVO ps=new PageSizeVO<>();
        if(pageSizeVO.getState()=="" || pageSizeVO.getState()==null){//查询全部
            pageSizeVO.setState(null);
            ps.setData(iser.adminFindAll(pageSizeVO));
            ps.setCount(iser.adminFindAllSum(10));//总数
        }else{//根据状态查询
            ps.setData(iser.adminFindAll(pageSizeVO));
            ps.setCount(iser.adminFindAllSum(Integer.valueOf(pageSizeVO.getState())));//总数
        }
        return ps;
    };

    @PostMapping("/adminFindNoAll")
    @ApiOperation("管理员查询审核表所有问题")
    public PageSizeVO<List<IssBean>> adminFindNoAll(@RequestBody PageSizeVO pageSizeVO){
        log.info("问题{}"+pageSizeVO);
        log.info("状态{}"+pageSizeVO.getState());
        pageSizeVO.setStartIndex(pageSizeVO.getStartIndexInfo());//获取起始页
        System.out.println(pageSizeVO.getStartIndex());

        //封装返回前台
        PageSizeVO ps=new PageSizeVO<>();

        if(pageSizeVO.getState()=="" || pageSizeVO.getState()==null){//查询全部
            pageSizeVO.setState(null);
            ps.setData(iser.adminFindNoAll(pageSizeVO));
            ps.setCount(iser.adminFindNoAllSum(10));//总数
            System.out.println(iser.adminFindNoAll(pageSizeVO)+"**********");
        }else{//根据状态查询
            ps.setData(iser.adminFindNoAll(pageSizeVO));
            ps.setCount(iser.adminFindNoAllSum(Integer.valueOf(pageSizeVO.getState())));//总数
        }
        return ps;
    }

    @GetMapping("/adminUpdateQa")
    @ApiOperation("管理员修改问题表")
    public int adminUpdateQa(@RequestParam int qid,@RequestParam int state,@RequestParam int tid) throws MessagingException {
        IssBean iss=iser.getByQid(qid);//根据问题id获取问题所有信息
        System.out.println(iss+"--------------------");
        if(state==1){//上架
            if(iss.getState()!=1){//下架改上架(不是上架改上架)
                iser.addUserQaCount(iss.getUid());  //给用户表的提问数+1
            }


            int s= iser.findSearchByAid(qid);//查询搜索表数据是否已存在
            int d=iser.findDynamicByQid(qid);//查询动态表数据是否已存在
            if(s==0){
                iser.addQaSearch(iss);//将问题存入搜索表
            }
            if(d==0){
                iser.addDynamic(iss);//将问题存入动态表
            }
            iser.setemailquestion(iss.getUid(),1,iss.getQ_title());//通过给用户发送邮件通知
        }else if(state==2){//下架
            if(iss.getState()!=2){//上架改下架(不是下架改下架)
                iser.deleteUserQaCount(iss.getUid()); //用户表提问总数-1
            }

            iser.deleteQaDynamic(qid);//下架时删除动态表数据
            iser.deleteQaSearch(qid);//删除搜索表
            iser.setemailquestion(iss.getUid(),2,iss.getQ_title());//通过给用户发送邮件通知
        }
        return iser.adminUpdateQa(qid,state,tid);
    }

    @PostMapping("/initQa")
    @ApiOperation("管理员修改审核表问题")
    public int initQa(@RequestBody IssBean iss) throws MessagingException {
        log.info("iss======{}",iss);
        if(iss.getState()==2){//通过
            iser.addUserQaCount(iss.getUid());  //给用户表的提问数+1

            System.out.println("通过==================="+iss.getQid_no());
            iser.deleteIssNo(iss.getQid_no());//删除审核表数据

            int qid=iser.initQa(iss);//获取主键
            iss.setQid(qid);

            iser.addDynamic(iss);//将问题存入动态表
            iser.addQaSearch(iss);//将问题存入搜索表

            iser.setemailquestionno(iss.getUid(),3,iss.getQ_title());//通过给用户发送邮件通知
            return iser.addQaInstation(iss);//将问题存入站内消息表
        }else if(iss.getState()==3){//未通过
            iser.setemailquestionno(iss.getUid(),2,iss.getQ_title());//通过给用户发送邮件通知


            return iser.adminUpdateIssNo(iss);//修改审核表
        }
            return 0;
    }

    @PostMapping("/updateColumn")
    @ApiOperation("管理员修改栏目")
    public int updateColumn(@RequestBody ColumnBean cb){
        return iser.updateColumn(cb);
    }

    @PostMapping("/initColumn")
    @ApiOperation("管理员增加栏目")
    public int initColumn(@RequestBody ColumnBean cb){
        return iser.initColumn(cb);
    }
}